/**
 *                            License
 * THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS  
 * CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). 
 * THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW.  
 * ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR  
 * COPYRIGHT LAW IS PROHIBITED.
 * 
 * BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND  
 * AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE  
 * MAY BE CONSIDERED TO BE A CONTRACT,
 * THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED 
 * HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
 * 
 */
package com.lineage.server.storage;

import java.util.List;

import com.lineage.server.model.Instance.L1ItemInstance;
import com.lineage.server.storage.mysql.MySqlCharactersItemStorage;

/**
 * Class <code>CharactersItemStorage</code> 抽象类:储存角色的道具.
 * 
 * @author jrwz
 * @version 2012-5-9下午08:46:36
 * @see com.lineage.server.storage
 * @since JDK1.7
 */
public abstract class CharactersItemStorage {

    /** 实例. */
    private static CharactersItemStorage _instance;

    /**
     * 当实例为空时才新建一个.
     * 
     * @return MySqlCharactersItemStorage()类的实例
     */
    public static CharactersItemStorage create() {
        if (_instance == null) {
            _instance = new MySqlCharactersItemStorage();
        }
        return _instance;
    }

    /**
     * 删除道具.
     * 
     * @param item
     *            要删除的道具
     * @throws Exception
     *             构造详细消息为 null 的新异常。原因尚未被初始化，可在以后通过调用 Throwable.initCause(java.lang.Throwable) 对其进行初始化。
     */
    public abstract void deleteItem(L1ItemInstance item) throws Exception;

    /**
     * 取得道具数量.
     * 
     * @param objId
     *            道具数量
     * @return 道具数量
     * @throws Exception
     *             构造详细消息为 null 的新异常。原因尚未被初始化，可在以后通过调用 Throwable.initCause(java.lang.Throwable) 对其进行初始化。
     */
    public abstract int getItemCount(int objId) throws Exception;

    /**
     * 加载所有道具.
     * 
     * @param objId
     *            道具编号
     * @return 道具编号
     * @throws Exception
     *             构造详细消息为 null 的新异常。原因尚未被初始化，可在以后通过调用 Throwable.initCause(java.lang.Throwable) 对其进行初始化。
     */
    public abstract List<L1ItemInstance> loadItems(int objId) throws Exception;

    /**
     * 储存道具.
     * 
     * @param objId
     *            道具的编号
     * @param item
     *            要储存的道具
     * @throws Exception
     *             构造详细消息为 null 的新异常。原因尚未被初始化，可在以后通过调用 Throwable.initCause(java.lang.Throwable) 对其进行初始化。
     */
    public abstract void storeItem(int objId, L1ItemInstance item)
            throws Exception;

    /**
     * 更新(增加的HP).
     * 
     * @param item
     *            道具
     * @throws Exception
     *             构造详细消息为 null 的新异常。原因尚未被初始化，可在以后通过调用 Throwable.initCause(java.lang.Throwable) 对其进行初始化。
     */
    public abstract void updateaddHp(L1ItemInstance item) throws Exception;

    /**
     * 更新(增加的MP).
     * 
     * @param item
     *            道具
     * @throws Exception
     *             构造详细消息为 null 的新异常。原因尚未被初始化，可在以后通过调用 Throwable.initCause(java.lang.Throwable) 对其进行初始化。
     */
    public abstract void updateaddMp(L1ItemInstance item) throws Exception;

    /**
     * 更新(增加的SP).
     * 
     * @param item
     *            道具
     * @throws Exception
     *             构造详细消息为 null 的新异常。原因尚未被初始化，可在以后通过调用 Throwable.initCause(java.lang.Throwable) 对其进行初始化。
     */
    public abstract void updateaddSp(L1ItemInstance item) throws Exception;

    /**
     * 更新(地属性魔防).
     * 
     * @param item
     *            道具
     * @throws Exception
     *             构造详细消息为 null 的新异常。原因尚未被初始化，可在以后通过调用 Throwable.initCause(java.lang.Throwable) 对其进行初始化。
     */
    public abstract void updateEarthMr(L1ItemInstance item) throws Exception;

    /**
     * 更新(火属性魔防).
     * 
     * @param item
     *            道具
     * @throws Exception
     *             构造详细消息为 null 的新异常。原因尚未被初始化，可在以后通过调用 Throwable.initCause(java.lang.Throwable) 对其进行初始化。
     */
    public abstract void updateFireMr(L1ItemInstance item) throws Exception;

    /**
     * 更新(回血).
     * 
     * @param item
     *            道具
     * @throws Exception
     *             构造详细消息为 null 的新异常。原因尚未被初始化，可在以后通过调用 Throwable.initCause(java.lang.Throwable) 对其进行初始化。
     */
    public abstract void updateHpr(L1ItemInstance item) throws Exception;

    /**
     * 更新道具(属性加成种类).
     * 
     * @param item
     *            道具
     * @throws Exception
     *             构造详细消息为 null 的新异常。原因尚未被初始化，可在以后通过调用 Throwable.initCause(java.lang.Throwable) 对其进行初始化。
     */
    public abstract void updateItemAttrEnchantKind(L1ItemInstance item)
            throws Exception;

    /**
     * 更新道具(属性加成等级).
     * 
     * @param item
     *            道具
     * @throws Exception
     *             构造详细消息为 null 的新异常。原因尚未被初始化，可在以后通过调用 Throwable.initCause(java.lang.Throwable) 对其进行初始化。
     */
    public abstract void updateItemAttrEnchantLevel(L1ItemInstance item)
            throws Exception;

    /**
     * 更新道具(祝福).
     * 
     * @param item
     *            道具
     * @throws Exception
     *             构造详细消息为 null 的新异常。原因尚未被初始化，可在以后通过调用 Throwable.initCause(java.lang.Throwable) 对其进行初始化。
     */
    public abstract void updateItemBless(L1ItemInstance item) throws Exception;

    /**
     * 更新道具(ChargeCount).
     * 
     * @param item
     *            道具
     * @throws Exception
     *             构造详细消息为 null 的新异常。原因尚未被初始化，可在以后通过调用 Throwable.initCause(java.lang.Throwable) 对其进行初始化。
     */
    public abstract void updateItemChargeCount(L1ItemInstance item)
            throws Exception;

    /**
     * 更新道具(数量).
     * 
     * @param item
     *            道具
     * @throws Exception
     *             构造详细消息为 null 的新异常。原因尚未被初始化，可在以后通过调用 Throwable.initCause(java.lang.Throwable) 对其进行初始化。
     */
    public abstract void updateItemCount(L1ItemInstance item) throws Exception;

    /**
     * 更新道具(延迟效果).
     * 
     * @param item
     *            道具
     * @throws Exception
     *             构造详细消息为 null 的新异常。原因尚未被初始化，可在以后通过调用 Throwable.initCause(java.lang.Throwable) 对其进行初始化。
     */
    public abstract void updateItemDelayEffect(L1ItemInstance item)
            throws Exception;

    /**
     * 更新道具(耐久度).
     * 
     * @param item
     *            道具
     * @throws Exception
     *             构造详细消息为 null 的新异常。原因尚未被初始化，可在以后通过调用 Throwable.initCause(java.lang.Throwable) 对其进行初始化。
     */
    public abstract void updateItemDurability(L1ItemInstance item)
            throws Exception;

    /**
     * 更新道具(加成等级).
     * 
     * @param item
     *            道具
     * @throws Exception
     *             构造详细消息为 null 的新异常。原因尚未被初始化，可在以后通过调用 Throwable.initCause(java.lang.Throwable) 对其进行初始化。
     */
    public abstract void updateItemEnchantLevel(L1ItemInstance item)
            throws Exception;

    /**
     * 更新道具(装备状态).
     * 
     * @param item
     *            道具
     * @throws Exception
     *             构造详细消息为 null 的新异常。原因尚未被初始化，可在以后通过调用 Throwable.initCause(java.lang.Throwable) 对其进行初始化。
     */
    public abstract void updateItemEquipped(L1ItemInstance item)
            throws Exception;

    /**
     * 更新道具(编号).
     * 
     * @param item
     *            道具
     * @throws Exception
     *             构造详细消息为 null 的新异常。原因尚未被初始化，可在以后通过调用 Throwable.initCause(java.lang.Throwable) 对其进行初始化。
     */
    public abstract void updateItemId(L1ItemInstance item) throws Exception;

    /**
     * 更新道具(鉴定状态).
     * 
     * @param item
     *            道具
     * @throws Exception
     *             构造详细消息为 null 的新异常。原因尚未被初始化，可在以后通过调用 Throwable.initCause(java.lang.Throwable) 对其进行初始化。
     */
    public abstract void updateItemIdentified(L1ItemInstance item)
            throws Exception;

    /**
     * 更新道具(剩余时间).
     * 
     * @param item
     *            道具
     * @throws Exception
     *             构造详细消息为 null 的新异常。原因尚未被初始化，可在以后通过调用 Throwable.initCause(java.lang.Throwable) 对其进行初始化。
     */
    public abstract void updateItemRemainingTime(L1ItemInstance item)
            throws Exception;

    /**
     * 更新(魔防).
     * 
     * @param item
     *            道具
     * @throws Exception
     *             构造详细消息为 null 的新异常。原因尚未被初始化，可在以后通过调用 Throwable.initCause(java.lang.Throwable) 对其进行初始化。
     */
    public abstract void updateM_Def(L1ItemInstance item) throws Exception;

    /**
     * 更新(回魔).
     * 
     * @param item
     *            道具
     * @throws Exception
     *             构造详细消息为 null 的新异常。原因尚未被初始化，可在以后通过调用 Throwable.initCause(java.lang.Throwable) 对其进行初始化。
     */
    public abstract void updateMpr(L1ItemInstance item) throws Exception;

    /**
     * 更新(水属性魔防).
     * 
     * @param item
     *            道具
     * @throws Exception
     *             构造详细消息为 null 的新异常。原因尚未被初始化，可在以后通过调用 Throwable.initCause(java.lang.Throwable) 对其进行初始化。
     */
    public abstract void updateWaterMr(L1ItemInstance item) throws Exception;

    /**
     * 更新(风属性魔防).
     * 
     * @param item
     *            道具
     * @throws Exception
     *             构造详细消息为 null 的新异常。原因尚未被初始化，可在以后通过调用 Throwable.initCause(java.lang.Throwable) 对其进行初始化。
     */
    public abstract void updateWindMr(L1ItemInstance item) throws Exception;
}
